]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
status/location: Handle geoclue not being activatable
authorWill Thompson <wjt@endlessos.org>
Wed, 8 Mar 2023 20:44:36 +0000 (20:44 +0000)
committerMarge Bot <marge-bot@gnome.org>
Sun, 19 Mar 2023 12:46:50 +0000 (12:46 +0000)
In GNOME OS, due to a misconfiguration, geoclue was configured without
systemd support. In that configuration, geoclue does not install its
systemd .service file (geoclue.service) but it (incorrectly) includes
the following line in its D-Bus service file:

    SystemdService=geoclue.service

As a result, when dbus-daemon tried to activate it at gnome-shell's
request, it would fail with:

    Unit geoclue.service not found

Then, GeoclueAgent._onGeoclueVanished() would be called, as the
name_vanished_handler passed to Gio.bus_watch_name(). This is consistent
with Gio.bus_watch_name()'s documentation:

> You are guaranteed that one of the handlers will be invoked after
> calling this function.

But that function assumed that this._managerProxy is defined, leading
to:

    JS ERROR: TypeError: this._managerProxy is undefined
    _onGeoclueVanished@resource:///org/gnome/shell/ui/status/location.js:163:9

Fix this by checking for nullishness of this._managerProxy. (Strictly
speaking, it's undefined rather than being null, but other code in this
file already uses the vaguer '!= null' test, which considers undefined
to be null.)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2689>

js/ui/status/location.js

index a2481f4c3598947c53ac40f05a37b2fae3c12bcd..45f6b7ac8add4d0c4c6a0c55cf3976e0c12b902d 100644 (file)
@@ -160,7 +160,7 @@ var GeoclueAgent = GObject.registerClass({
     }
 
     _onGeoclueVanished() {
-        this._managerProxy.disconnectObject(this);
+        this._managerProxy?.disconnectObject(this);
         this._managerProxy = null;
 
         this.notify('in-use');